package br.uniriotec.pm.domain;

import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Venda implements Comparable<Venda> {
	private Long codigo;
	private Calendar data;
	private Vendedor vendedor;
	private Map <Produto, Integer> mapaQuantidadeProdutos;
	
	public Venda() {
		super();
		this.mapaQuantidadeProdutos = new HashMap<Produto, Integer>();
	}

	public Venda(Long codigo) {
		super();
		this.codigo = codigo;
		this.mapaQuantidadeProdutos = new HashMap<Produto, Integer>();
	}

	public Venda(Long codigo, Calendar data, Vendedor vendedor) {
		super();
		this.codigo = codigo;
		this.data = data;
		this.vendedor = vendedor;
		this.mapaQuantidadeProdutos = new HashMap<Produto, Integer>();
	}

	public Long getCodigo() {
		return this.codigo;
	}

	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}

	public Calendar getData() {
		return this.data;
	}

	public void setData(Calendar data) {
		this.data = data;
	}

	public Vendedor getVendedor() {
		return this.vendedor;
	}

	public void setVendedor(Vendedor vendedor) {
		this.vendedor = vendedor;
	}

	public Map<Produto, Integer> getMapaQuantidadeProdutos() {
		return this.mapaQuantidadeProdutos;
	}

	public void setMapaQuantidadeProdutos(Map<Produto, Integer> mapaQuantidadeProdutos) {
		this.mapaQuantidadeProdutos = mapaQuantidadeProdutos;
	}
	
	public Integer putQuantidade(Produto produto, Integer quantidade) {
		return this.mapaQuantidadeProdutos.put(produto, quantidade);
	}
	
	public Integer removeQuantidade(Produto produto) {
		return this.mapaQuantidadeProdutos.remove(produto);
	}
	
	public Integer getQuantidade(Produto produto) {
		return this.mapaQuantidadeProdutos.get(produto);
	}
	
	public Set<Produto> getConjuntoProdutos() {
		return this.mapaQuantidadeProdutos.keySet();
	}
	
	public boolean possuiQuantidadeProduto(Produto produto) {
		return this.mapaQuantidadeProdutos.containsKey(produto);
	}
	
	public int totalQuantidades() {
		return this.mapaQuantidadeProdutos.size();
	}
	
	@Override
	public int compareTo(Venda o) {
		return o.getCodigo().compareTo(this.codigo);
	}
	
	@Override
	public int hashCode() {
		return this.codigo.hashCode();
	}
}
